import { type UserConfigExport, type PluginOption } from 'vite'
import path, { resolve } from 'path'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import UnoCSS from 'unocss/vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import { visualizer } from 'rollup-plugin-visualizer'

/** 配置项文档：https://cn.vitejs.dev/config */
export default (): UserConfigExport => {
  return {
    /** 打包时根据实际情况修改 base */
    base: './',
    resolve: {
      alias: {
        /** @ 符号指向 src 目录 */
        '@': resolve(__dirname, './src')
      }
    },
    build: {
      /** 单个 chunk 文件的大小超过 2048KB 时发出警告 */
      chunkSizeWarningLimit: 2048,
      /** 禁用 gzip 压缩大小报告 */
      reportCompressedSize: false,
      /** 打包后静态资源目录 */
      assetsDir: 'static',
      commonjsOptions: {
        include: [/node_modules/],
        transformMixedEsModules: true
      }
    },
    /** 混淆器 */
    /** Vite 插件 */
    plugins: [
      vue(),
      /** 自动导入 */
      AutoImport({
        resolvers: [ElementPlusResolver()]
      }),
      /** 自动注册组件 */
      Components({
        resolvers: [ElementPlusResolver()]
      }),
      UnoCSS(),
      createSvgIconsPlugin({
        // 需要自动导入的 svg 文件目录（可自行修改）
        iconDirs: [path.resolve(__dirname, 'src/icons/svg')],
        // 执行icon name的格式（可自行修改）
        symbolId: 'icon-[dir]-[name]'
      }),
      visualizer() as PluginOption
    ],
    server: {
      /** 开发环境代理 */
      proxy: {
        '/api': {
          target: 'http://localhost:3000',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, '')
        }
      }
    }
  }
}
